/**
 * 
 */
package info.niwota.home.web;

import info.niwota.commons.io.Files;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import x.java.io.File;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.net.Uri;
import android.text.TextUtils;

/**
 * @author qiangli
 * 
 */
public final class Utils {

//	private static final SimpleDateFormat df = new SimpleDateFormat(
//			"yyyy-MM-dd HH:mm");
//
//	private final static int fileindex = 0;
//
//	private final static String iconpath = "/content/info.niwota.home/drawable/";
//
//	private final static String context = "/content/info.niwota.home/";
//
//	private static final int MAX_BCNAME_LEN = 8;
//
//	private static final int MAX_NAME_LEN = 16;
//
//	private final static int pagesize = Integer.MAX_VALUE;
//
//	private static final String[] TYPES = new String[] { "application/",
//			"text/", "image/", "audio/", "video/" };
//
//	private static void emptycontent(StringBuilder sb, String path,
//			boolean canWrite) {
//		sb.append("<tr><td></td></tr>");
//		sb.append("<tr><td>Folder is empty</td></tr>");
//		sb.append("<tr><td></td></tr>");
//	}

	// private static void format(StringBuilder sb, String context, String p,
	// String name, String display, boolean isFile, long length,
	// Date date, String type) {
	// String path = pathcat(context, p);
	// sb.append("<tr>");
	// String pathname = pathcat(path, name);
	// if (name.endsWith(".zip")) {
	// sb.append("<td><img src=\"" + iconpath);
	// sb.append("filefolder.png");
	// } else if (name.endsWith(x.java.io.File.LINK_EXT)) {
	// sb.append("<td><img src=\"" + iconpath);
	// sb.append("link.png");
	// } else if (isFile) {
	// String icon = icon(type);
	// if (icon == null) {
	// // TODO
	// sb.append("<td><img src=\"" + iconpath + icon);
	// } else {
	// sb.append("<td><img src=\"" + iconpath + icon);
	// }
	// } else {
	// // folder
	// sb.append("<td><img src=\"" + iconpath);
	// sb.append("folder.png");
	// }
	// sb.append("\" />");
	// sb.append("</td><td><a  class=\"file-link\" href=\"");
	//
	// if (isFile) {
	// sb.append(pathname);
	// } else {
	// // folder
	// sb.append(pathname);
	// sb.append("/");
	// }
	// sb.append("\" target=\"");
	// sb.append(isFile ? "_blank" : "_self");
	// sb.append("\" title=\"");
	// sb.append(name);
	// if (!isFile) {
	// sb.append("/");
	// }
	// sb.append("\">");
	// sb.append(shorten(display, MAX_NAME_LEN));
	// if (!isFile) {
	// sb.append("/");
	// }
	// sb.append("</a></td><td align=\"right\"><span class=\"file-size\">");
	// if (isFile) {
	// x.java.io.File.formatSize(length, sb);
	// }
	// sb.append("</span></td><td><span class=\"file-date\">");
	// sb.append(df.format(date));
	// sb.append("</span></td></tr>");
	// sb.append("\r\n");
	// }

//	public static JSONObject formatFolder(int view, x.java.io.File file)
//			throws JSONException {
//		final JSONObject json = new JSONObject();
//		final long starttime = System.currentTimeMillis();
//		final String path = file.getPath();
//		// switch (view) {
//		// case 0:
//		// json.put("breadcrumb", makeBreadcrumbs(context, path, file
//		// .isDirectory()));
//		// break;
//		// case 1:
//		// json.put("breadcrumb", makeBreadcrumbsThumbnail(context, path, file
//		// .isDirectory()));
//		// break;
//		// case 2:
//		// default:
//		// }
//
//		// //final StringBuilder sb = new StringBuilder();
//		final x.java.io.File[] files = (file == null ? new x.java.io.File[0]
//				: file.listFiles());
//		final int total = (files == null ? 0 : files.length);
//
//		final boolean isEmpty = (total == 0);
//		final boolean canRead = (file.canRead());
//
//		// final boolean canWrite = file.canWrite();
//		//
//		// // page content
//		//
//		// if (!isEmpty) {
//		// sb.setLength(0);
//		// if (files != null) {
//		// Date date = new Date();
//		// final int len = files.length;
//		// //
//		// switch (view) {
//		// case 0:
//		// // list
//		// sb
//		// .append("<table class=\"file-list\"  border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
//		// for (int i = 0; i < files.length; i++) {
//		// date.setTime(files[i].lastModified());
//		// format(sb, context, path, files[i].getName(), files[i]
//		// .getDisplayName(), files[i].isFile(), files[i]
//		// .length(), date, files[i].getContentType());
//		// }
//		// sb.append("</table>");
//		// break;
//		// case 1:
//		// // thumbnail
//		// sb.append("<div >");
//		// for (int i = 0; i < len; i++) {
//		// formatThumbnail(context, sb, path, files[i].getName(),
//		// files[i].getDisplayName(), files[i].isFile(),
//		// files[i].getContentType());
//		// }
//		// sb.append("</div>");
//		// break;
//		// case 2:
//		// default:
//		// }
//		// //
//		// json.put("filecontent", sb.toString());
//		// }
//		// // index range begin - end of total
//		// int begin = fileindex + 1;
//		// int end = Math.min((fileindex + pagesize), total);
//		// sb.setLength(0);
//		// sb.append(begin);
//		// sb.append(" - ");
//		// sb.append(end);
//		// sb.append(" of ");
//		// sb.append(total);
//		// json.put("fileindex", fileindex);
//		// json.put("filetotal", sb.toString());
//		// //
//		// } else {
//		// // empty folder
//		// sb.setLength(0);
//		// emptycontent(sb, path, canWrite);
//		// json.put("fileindex", "");
//		// json.put("filetotal", "");
//		// json.put("filecontent", sb.toString());
//		// }
//		//
//
//		JSONArray list = new JSONArray();
//		if (!isEmpty) {
//			for (int i = 0; i < files.length; i++) {
//				list.put(toJSONObject(files[i]));
//			}
//		}
//
//		final long now = System.currentTimeMillis();
//		json.put("elapsed", "" + (now - starttime));
//
//		// json.put("twister", iconpath + "twister" + view);
//
//		json.put("path", path);
//		json.put("view", view);
//		json.put("canRead", canRead);
//		json.put("list", list);
//		json.put("total", total);
//		json.put("isEmpty", isEmpty);
//		//
//		return json;
//	}

//	private static JSONObject toJSONObject(File file) throws JSONException {
//		final JSONObject json = new JSONObject();
//		json.put("path", file.getPath());
//		json.put("name", file.getName());
//		json.put("displayName", file.getDisplayName());
//		json.put("lastModified", file.lastModified());
//		json.put("date", df.format(file.lastModified()));
//		if (file.isDirectory()) {
//			json.put("isFolder", true);
//			json.put("type", "");
//		} else {
//			json.put("length", file.length());
//			json.put("size", File.formatSize(file.length()));
//			json.put("type", file.getContentType());
//		}
//		json.put("canRead", file.canRead());
//		json.put("canWrite", file.canWrite());
//		json.put("canExecute", file.canExecute());
//		return json;
//	}

	// private static void formatThumbnail(String context, StringBuilder sb,
	// String p, String name, String display, boolean isFile, String type) {
	// // <a class="cell" target="_blank" href="#"><img src=".gif" /><div
	// // class="caption">name</div></a>
	// sb.append("<a  class=\"cell\" href=\"");
	// String path = pathcat(context, p);
	// String pathname = pathcat(path, name);
	// if (isFile) {
	// sb.append(pathname);
	// } else {
	// // folder
	// sb.append(pathname);
	// sb.append("/");
	// }
	// sb.append("\" target=\"");
	// sb.append(isFile ? "_blank" : "_self");
	// sb.append("\" title=\"");
	// sb.append(name);
	// if (!isFile) {
	// sb.append("/");
	// }
	// sb.append("\">");
	// // img
	// if (name.endsWith(".zip")) {
	// sb.append("<img src=\"" + iconpath);
	// sb.append("filefolder.png");
	// } else if (name.endsWith(x.java.io.File.LINK_EXT)) {
	// sb.append("<img src=\"" + iconpath);
	// sb.append("link.png");
	// } else if (isFile) {
	// String icon = icon(type);
	// if (icon == null) {
	// // a known image type
	// // TODO
	// sb.append("<img src=\"" + iconpath + icon);
	// } else {
	// sb.append("<img src=\"" + iconpath + icon);
	// }
	// } else {
	// // folder
	// sb.append("<img src=\"" + iconpath);
	// sb.append("folder.png");
	// }
	// sb.append("\" />");
	// sb.append("<div class=\"caption\">");
	// //
	// sb.append(shorten(display, MAX_NAME_LEN));
	// sb.append("</div></a>");
	// }

	public static int getView(Uri uri) {
		try {
			String s = uri.getQueryParameter("view");
			int view = 0;
			if (s == null) {
				String data = uri.getQueryParameter("data");
				s = scan(data, "view");
			}
			if (s == null) {
				// cookies passed as query param
				String cookies = uri.getQueryParameter("cookies");
				s = scan(cookies, "view");
			}
			if (s == null) {
				return view;
			}
			view = Integer.parseInt(s);
			return view;
		} catch (Exception e) {
			// e.printStackTrace();
		}
		return 0;
	}

	// private static String icon(String contentType) {
	// if (contentType.startsWith("text/html")) {
	// return "html.png";
	// }
	// if (contentType.startsWith("text/tea")) {
	// return "text.png";
	// }
	// int type = 0;
	//
	// for (int i = 0; i < TYPES.length; i++) {
	// if (contentType.startsWith(TYPES[i])) {
	// type = i;
	// break;
	// }
	// }
	// switch (type) {
	// case x.java.io.File.TYPE_TEXT:
	// return "text.png";
	// case x.java.io.File.TYPE_AUDIO:
	// return "audio.png";
	// case x.java.io.File.TYPE_IMAGE:
	// return "image.png";
	// case x.java.io.File.TYPE_VIDEO:
	// return "video.png";
	// }
	// return "app.png";
	// }

	// private static String makeBreadcrumbs(String root, String p,
	// boolean isFolder) {
	//
	// int prefix = p.startsWith("v:/") ? 3 : 1;
	// String[] sa = p.substring(prefix).split("/");
	//
	// StringBuilder bc = new StringBuilder();
	// bc.append("<a href=\"");
	// bc.append(root); // "v:///"
	// bc.append("\">");
	// bc.append("<img class=\"icon32\" src=\"" + iconpath + "top.png\" />");
	// bc.append("v:/"); // display name
	// bc.append("</a>&nbsp;&raquo;&nbsp;");
	// //
	// if (p.length() <= prefix) {
	// return bc.toString();
	// }
	// StringBuilder link = new StringBuilder(root);
	// link.append(root.endsWith("/") ? "" : "/");
	// int len = (isFolder ? sa.length : sa.length - 1);
	// for (int i = 0; i < len; i++) {
	// String n = sa[i];
	// link.append(n);
	// link.append("/");
	// //
	// bc.append("<a href=\"");
	// bc.append(link.toString());
	// bc.append("\">");
	// bc.append(shorten(n, MAX_BCNAME_LEN));
	// bc.append("</a>&nbsp;&raquo;&nbsp;");
	// }
	// String s = bc.toString();
	// //
	// return s;
	// }

	// private static String makeBreadcrumbsThumbnail(String root, String p,
	// boolean isFolder) {
	// // // <a class="cell" href="#"><img src=".gif" /><div
	// // class="caption">name</div></a>
	// int prefix = p.startsWith("v:/") ? 3 : 1;
	// String[] sa = p.substring(prefix).split("/");
	//
	// StringBuilder bc = new StringBuilder();
	//
	// bc.append("<a class=\"cell\"  href=\"");
	// bc.append(root); // "v:///"
	// bc.append("\">");
	// bc.append("<img src=\"" + iconpath
	// + "top.png\" /><div class=\"caption\">");
	// bc.append("v:/"); // display name
	// bc.append("</div></a>");
	// //
	// if (p.length() <= prefix) {
	// return bc.toString();
	// }
	// StringBuilder link = new StringBuilder(root);
	// link.append(root.endsWith("/") ? "" : "/");
	// int len = (isFolder ? sa.length : sa.length - 1);
	// // final int maxCol = 6; //
	// // int colCount = 2;
	// for (int i = 0; i < len; i++) {
	// String n = sa[i];
	// link.append(n);
	// link.append("/");
	// //
	// bc.append("<a class=\"cell\"  href=\"");
	// bc.append(link.toString());
	// bc.append("\">");
	// bc.append("<img src=\"" + iconpath
	// + "breadcrumb.png\" /><div class=\"caption\">");
	// bc.append(shorten(n, MAX_BCNAME_LEN));
	// bc.append("</div></a>");
	//
	// }
	// String s = bc.toString();
	// //
	// return s;
	// }

	// private static String pathcat(String path, String name) {
	// boolean end = path.endsWith("/");
	// boolean start = name.startsWith("/");
	// if (!end && !start) {
	// return path + "/" + name;
	// }
	// if (end && start) {
	// return path + name.substring(1);
	// }
	// return path + name;
	// }

	public static String scan(String cookies, String key) {
		if (TextUtils.isEmpty(cookies)) {
			return null;
		}
		final String[] sa = cookies.split(";");
		final String key_ = key + "=";
		for (int i = 0; i < sa.length; i++) {
			String sai = sa[i].trim();
			if (sai.startsWith(key_)) {
				return sai.substring(key.length() + 1);
			}
		}
		return null;
	}

	// private static String shorten(String s, int max) {
	// if (s.length() > max) {
	// return s.substring(0, max) + "...";
	// }
	// return s;
	// }

	// public static int toggleView(int view) {
	// view++;
	// if (view >= 3) {
	// view = 0;
	// } else if (view < 0) {
	// view = 0;
	// }
	// return view;
	// }

	private Utils() {
	}

//	public static JSONObject formatStrip(int view, File fi)
//			throws JSONException {
//		String path = fi.getPath();
//		JSONObject json = new JSONObject();
//		json.put("path", path);
//		// json.put("twister", iconpath + "twister" + view);
//		json.put("view", view);
//		// String bc = makeBreadcrumbs(context, path, fi.isDirectory());
//		// json.put("breadcrumb", bc);
//		return json;
//	}

	public static void thumb(Bitmap image, File file, int width, int height) throws IOException {
		OutputStream out = new FileOutputStream(file);
		try {
			int w = image.getWidth();
			int h = image.getHeight();
			float scalew = ((float) width) / w;
			float scaleh = ((float) height) / h;
			float scale = Math.min(scalew, scaleh);
			Matrix matrix = new Matrix();
			matrix.postScale(scale, scale);
			Bitmap resized = Bitmap.createBitmap(image, 0, 0, w, h, matrix, true);
			resized.compress(Bitmap.CompressFormat.JPEG, 100, out);
		} finally {
			out.close();
		}
	}
	
	public static java.io.File getCacheFile(Context ctx, String pathname) {
		return Files.camouflage(ctx, pathname);
	}
}
